{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# spectre Benchmarks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pandas 1.0.0\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "print('pandas', pd.__version__)\n",
    "start, end = pd.Timestamp('2013-01-02', tz='UTC'), pd.Timestamp('2018-01-03', tz='UTC')\n",
    "\n",
    "import sys\n",
    "sys.path = ['..\\\\..\\\\spectre'] + sys.path\n",
    "\n",
    "from spectre import factors, parallel, data\n",
    "import pandas as pd\n",
    "loader = data.ArrowLoader('../../historical_data/us/prices/quandl/wiki_prices.feather')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "engine = factors.FactorEngine(loader)\n",
    "engine.to_cuda()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 3.47 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>ma</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th>asset</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">2013-01-03 00:00:00+00:00</th>\n",
       "      <th>A</th>\n",
       "      <td>38.110535</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAL</th>\n",
       "      <td>11.776899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAMC</th>\n",
       "      <td>67.738457</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAN</th>\n",
       "      <td>28.779516</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAON</th>\n",
       "      <td>19.606133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">2018-01-03 00:00:00+00:00</th>\n",
       "      <th>ZIXI</th>\n",
       "      <td>4.827700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZNGA</th>\n",
       "      <td>3.831000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZOES</th>\n",
       "      <td>13.561499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZTS</th>\n",
       "      <td>66.546745</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZUMZ</th>\n",
       "      <td>17.383249</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        ma\n",
       "date                      asset           \n",
       "2013-01-03 00:00:00+00:00 A      38.110535\n",
       "                          AAL    11.776899\n",
       "                          AAMC   67.738457\n",
       "                          AAN    28.779516\n",
       "                          AAON   19.606133\n",
       "2018-01-03 00:00:00+00:00 ZIXI    4.827700\n",
       "                          ZNGA    3.831000\n",
       "                          ZOES   13.561499\n",
       "                          ZTS    66.546745\n",
       "                          ZUMZ   17.383249"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "engine.remove_all_factors()\n",
    "engine.add(factors.MA(100), 'ma')\n",
    "%time dfsp=engine.run(start, end)\n",
    "dfsp.head(5).append(dfsp.tail(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "143 ms ± 1.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "144 ms ± 974 µs per loop (mean ± std. dev. of 10 runs, 3 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit engine.run(start, end)\n",
    "%timeit -n 3 -r 10 engine.run(start, end)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 927 ms\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>ema50</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th>asset</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">2013-01-03 00:00:00+00:00</th>\n",
       "      <th>A</th>\n",
       "      <td>38.896118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAL</th>\n",
       "      <td>12.635515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAMC</th>\n",
       "      <td>28.142620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAN</th>\n",
       "      <td>28.474855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAON</th>\n",
       "      <td>20.191982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">2018-01-03 00:00:00+00:00</th>\n",
       "      <th>ZIXI</th>\n",
       "      <td>4.585052</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZNGA</th>\n",
       "      <td>3.922959</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZOES</th>\n",
       "      <td>15.169839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZTS</th>\n",
       "      <td>70.053635</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZUMZ</th>\n",
       "      <td>19.615715</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     ema50\n",
       "date                      asset           \n",
       "2013-01-03 00:00:00+00:00 A      38.896118\n",
       "                          AAL    12.635515\n",
       "                          AAMC   28.142620\n",
       "                          AAN    28.474855\n",
       "                          AAON   20.191982\n",
       "2018-01-03 00:00:00+00:00 ZIXI    4.585052\n",
       "                          ZNGA    3.922959\n",
       "                          ZOES   15.169839\n",
       "                          ZTS    70.053635\n",
       "                          ZUMZ   19.615715"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "engine.remove_all_factors()\n",
    "engine.add(factors.EMA(50, adjust=True), 'ema50')\n",
    "%time dfsp=engine.run(start, end)\n",
    "dfsp.head(5).append(dfsp.tail(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "269 ms ± 1.75 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
      "270 ms ± 1.89 ms per loop (mean ± std. dev. of 10 runs, 3 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit engine.run(start, end)\n",
    "%timeit -n 3 -r 10 engine.run(start, end)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 368 ms\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>f</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th>asset</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">2013-01-03 00:00:00+00:00</th>\n",
       "      <th>A</th>\n",
       "      <td>0.188034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAL</th>\n",
       "      <td>0.995929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAMC</th>\n",
       "      <td>1.311495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAN</th>\n",
       "      <td>0.148885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAON</th>\n",
       "      <td>-0.484618</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">2018-01-03 00:00:00+00:00</th>\n",
       "      <th>ZIXI</th>\n",
       "      <td>0.100265</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZNGA</th>\n",
       "      <td>-1.142462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZOES</th>\n",
       "      <td>-0.713156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZTS</th>\n",
       "      <td>-1.022426</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ZUMZ</th>\n",
       "      <td>-1.104333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        f\n",
       "date                      asset          \n",
       "2013-01-03 00:00:00+00:00 A      0.188034\n",
       "                          AAL    0.995929\n",
       "                          AAMC   1.311495\n",
       "                          AAN    0.148885\n",
       "                          AAON  -0.484618\n",
       "2018-01-03 00:00:00+00:00 ZIXI   0.100265\n",
       "                          ZNGA  -1.142462\n",
       "                          ZOES  -0.713156\n",
       "                          ZTS   -1.022426\n",
       "                          ZUMZ  -1.104333"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "engine.remove_all_factors()\n",
    "f = factors.MACD()+factors.RSI()+factors.STOCHF()\n",
    "engine.add(f.rank().zscore(), 'f')\n",
    "%time dfsp=engine.run(start, end)\n",
    "dfsp.head(5).append(dfsp.tail(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "281 ms ± 2.55 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
      "282 ms ± 1.33 ms per loop (mean ± std. dev. of 10 runs, 3 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit engine.run(start, end)\n",
    "%timeit -n 3 -r 10 engine.run(start, end)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2.391538143157959, 'GB')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "torch.cuda.max_memory_allocated()/1024**3, 'GB'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Backtesting\n",
    "--------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path = ['..\\\\..\\\\spectre'] + sys.path\n",
    "\n",
    "from spectre import factors, trading\n",
    "from spectre.data import ArrowLoader, DataLoaderFastGetter\n",
    "import pandas as pd\n",
    "\n",
    "loader = ArrowLoader('../../historical_data/us/prices/quandl/wiki_prices.feather')\n",
    "\n",
    "import plotly.io as pio\n",
    "pio.renderers.default = \"svg\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "25b8bde8edcc4421a4d234a3c7d693aa",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1257.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"450\" viewBox=\"0 0 700 450\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"450\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-2038c4\"><g class=\"clips\"><clipPath id=\"clip2038c4xyplot\" class=\"plotclip\"><rect width=\"470\" height=\"320\"/></clipPath><clipPath id=\"clip2038c4xy2plot\" class=\"plotclip\"><rect width=\"470\" height=\"320\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2038c4x\"><rect x=\"80\" y=\"0\" width=\"470\" height=\"450\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2038c4y\"><rect x=\"0\" y=\"50\" width=\"700\" height=\"320\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2038c4xy\"><rect x=\"80\" y=\"50\" width=\"470\" height=\"320\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2038c4y2\"><rect x=\"0\" y=\"50\" width=\"700\" height=\"320\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2038c4xy2\"><rect x=\"80\" y=\"50\" width=\"470\" height=\"320\"/></clipPath></g><g class=\"gradients\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"80\" y=\"50\" width=\"470\" height=\"320\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"1\" fill-rule=\"evenodd\" d=\"M82.44,370H524.88V50H82.44Z\" clip-path=\"url('#clip2038c4x')\" style=\"opacity: 0.5; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(250, 250, 210); fill-opacity: 1; stroke-width: 0px;\"/></g></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,330.46)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,279.01)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,227.55)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,176.1)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,124.65)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y2\"><path class=\"y2grid crisp\" transform=\"translate(0,332.28)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,294.56)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,256.84000000000003)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,219.12)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,181.4)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,143.68)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,105.96000000000001)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,68.24)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"><path class=\"yzl zl crisp\" transform=\"translate(0,73.2)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/><path class=\"y2zl zl crisp\" transform=\"translate(0,370)\" d=\"M80,0h470\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/></g><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"><path class=\"xy2-x\"/><path class=\"xy2-y\"/></g><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"><g class=\"xy2-x\"/><g class=\"xy2-y\"/></g><g class=\"plot\" transform=\"translate(80, 50)\" clip-path=\"url('#clip2038c4xyplot')\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace434c20\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M2.18,23.31L2.44,16L2.69,17.94L2.95,23.03L3.21,21.5L3.98,24.05L4.23,24.15L4.49,26.22L4.75,33.55L5,29.37L6.03,31L6.8,41.53L7.57,47.87L7.82,47.87L8.08,42.08L8.34,34.79L8.59,39.45L9.36,37.14L10.39,50.95L11.16,51.4L11.67,43.52L12.18,46.42L13.21,46.42L13.72,46.52L13.98,36.1L16.54,36.2L16.8,39.28L17.06,39.38L17.31,41.51L17.57,39.87L18.34,39.87L18.85,40.51L19.11,42.4L20.9,42.5L21.16,38.8L21.93,38.9L22.19,45.26L22.7,26.86L23.73,24.82L24.49,25.35L24.75,21.26L25.78,26.61L26.03,34.19L27.83,34.29L28.09,30.12L29.11,30.23L29.37,34.58L29.62,38.84L29.88,62.12L30.14,53.81L30.91,62.56L32.96,62.66L33.22,70.22L34.75,70.33L35.01,62.51L35.27,59.95L35.52,62.36L36.29,63.39L36.81,67.66L37.06,50.52L38.6,50.62L38.86,52.2L39.11,53.59L39.88,53.59L40.14,53.69L40.4,46.48L40.65,56.7L40.91,41.58L41.68,41.68L42.71,40.63L43.47,40.74L43.73,30.75L44.24,39.63L44.5,39.63L47.58,39.73L48.09,44.87L49.12,80.25L49.37,74.6L49.63,74.6L50.91,74.6L51.17,71.3L52.71,75.56L52.96,75.56L54.25,75.66L54.5,80.97L56.81,80.82L57.07,82.42L57.84,85.14L58.09,82.62L58.61,123.86L58.86,123.76L59.63,123.97L60.4,131.6L60.66,131.37L61.43,128.67L62.45,128.78L63.48,125.07L63.74,125.17L63.99,124.34L65.02,132.82L65.28,132.92L66.05,136.19L66.81,136.19L67.84,136.3L68.61,134.57L68.87,124.94L69.12,125.48L69.38,136.07L69.64,138.12L70.41,129.98L71.43,154.6L72.2,154.91L73.23,184.88L74,185.11L74.51,129.85L74.77,129.95L75.02,130.81L76.82,139.37L77.59,139.37L78.61,139.48L79.38,147.73L79.9,151.02L80.41,140.99L81.18,140.8L81.43,140.9L81.69,146.04L82.2,146.15L82.97,148.17L84,134.44L84.77,134.65L85.03,134.75L85.28,133.62L85.8,129.3L86.56,129.3L87.08,129.31L87.33,125.29L87.59,128.84L88.36,128.84L88.87,128.94L89.13,122.66L90.41,122.76L90.67,124.17L90.92,114.68L91.18,117.12L91.95,115.26L92.72,117.14L92.98,107.77L93.75,106.77L94,112.82L94.77,114.29L95.54,114.39L96.31,100.82L96.57,100.82L98.36,100.93L99.39,98.18L99.65,104.03L99.9,98.72L100.16,92.94L101.95,100.66L102.72,100.11L102.98,100.48L103.24,133.46L103.75,133.56L104.52,131.58L106.83,131.69L107.08,127.86L108.11,127.96L108.37,124.05L108.62,122.9L109.14,123.45L109.9,126.11L110.16,124.15L110.42,129.11L110.93,152.92L111.7,152.92L112.73,153.13L113.5,157.25L114.27,169.28L114.52,143.68L115.8,100.56L116.06,107.48L116.32,107.48L117.34,107.58L117.6,111.95L118.11,112.26L118.88,117.98L119.14,120.21L119.39,120L119.65,158.79L120.68,125.47L120.93,116.63L124.78,116.83L125.04,114.81L126.06,115.02L126.32,121.61L127.09,121.89L127.86,131.34L128.12,131.51L128.37,127.86L128.63,126.51L128.88,115.63L129.91,117.85L130.17,124.06L131.71,124.16L131.96,131.31L132.22,131.41L132.48,133.15L134.27,119.22L135.04,119.33L136.07,120.22L136.84,120.22L137.61,120.89L137.86,119.12L138.63,114.09L138.89,115.23L139.14,129.66L139.4,129.42L139.66,132.07L140.94,131.44L141.2,133.6L142.74,133.45L142.99,137.76L144.02,137.86L144.27,140.1L144.53,140.1L144.79,136.01L145.04,134.83L145.81,136.81L146.84,133.86L147.61,135.15L147.86,135.72L148.12,144.32L148.63,163.79L149.4,162.98L150.17,161.38L150.43,163.59L151.46,162.07L151.71,160.12L152.23,179.84L152.99,167.9L154.02,169.91L154.79,168.96L155.05,169.06L155.3,167.31L157.35,167.41L157.61,163.05L159.15,161.17L159.41,161.17L160.43,161.02L160.69,178.37L161.2,179.23L161.97,181.9L163,190.2L163.77,191.36L165.56,203.03L165.82,203.04L166.08,202.5L166.33,204.45L166.59,204.79L167.36,204.47L168.38,202.28L169.15,202.28L169.67,202.73L169.92,201.78L170.18,205.36L170.95,203.59L171.97,203.37L172.74,203.37L173,203.47L173.26,200.91L173.51,201.11L173.77,202.62L175.05,201.81L175.31,202.02L175.57,203.63L176.34,203.63L176.59,203.73L176.85,195.69L177.1,195.79L177.36,194.62L178.13,194.73L178.39,192.88L178.64,193.98L179.16,192.53L180.95,200.08L181.72,202.11L182.23,203.35L182.49,202.93L182.75,203.04L184.03,209.62L184.29,229.35L184.54,242.65L185.31,242.09L187.62,242.19L188.13,249.85L189.42,252.63L189.67,256.8L189.93,251.88L190.7,251.88L191.21,251.98L191.47,247.62L191.72,256.69L192.75,251.06L193.26,263.02L193.52,259.16L194.29,257.7L194.8,258.02L195.06,252.6L196.08,252.7L196.34,254.09L196.6,254.46L196.85,247.69L197.11,250.27L197.88,244.31L198.91,212.74L199.93,212.22L200.19,212.33L200.44,217.05L205.83,216.95L206.09,218.57L207.88,212.75L208.65,213.87L216.86,213.79L217.63,218.43L218.66,222.19L219.42,222.19L223.02,222.3L223.27,216.83L227.12,216.96L227.38,217.71L227.63,216.1L228.4,216.1L231.22,216.21L231.99,214.65L232.25,219.59L232.51,214.94L232.76,211.01L233.02,214.01L233.79,205.96L234.3,200.33L234.56,204.79L235.58,204.79L235.84,204.89L236.1,198.19L236.35,206.54L236.61,193.23L237.38,187.7L237.64,187.8L237.89,192.55L238.4,185.1L239.17,185.1L239.43,185.2L239.69,181.99L240.2,185.26L240.97,183.04L242,199.44L242.77,199.44L243.79,199.54L244.56,201.15L244.82,201.26L245.07,202.46L245.33,202.5L245.59,199.17L247.38,199.34L248.15,208.11L248.66,207.78L248.92,207.15L249.95,206.23L250.2,207.07L253.54,207.17L253.79,212.95L254.56,199.77L255.33,199.77L256.36,199.9L257.13,184.55L257.9,184.76L258.15,186.2L259.95,185.7L260.72,188.41L260.98,189.74L261.23,186.39L262.77,186.49L263.03,190.21L263.28,190.32L263.54,188.76L264.31,188.76L264.57,185.98L265.34,183.79L266.11,185.86L266.36,186.61L266.62,184.24L266.88,181.69L267.13,200.58L267.9,192.34L268.16,199.39L268.93,195.05L269.7,196.26L270.72,205.83L271.49,205.83L274.06,206.81L274.31,202.92L275.08,202.68L275.34,205.33L276.11,219.44L276.88,217.25L277.39,212.82L277.65,214.09L277.9,214.1L278.67,215.76L278.93,209.74L279.19,205.67L279.44,178.38L280.98,179.65L281.24,180.67L283.03,180.55L283.29,179.19L284.32,166.45L284.57,185.67L285.09,223.83L286.11,223.93L286.88,227.51L287.65,227.51L289.96,227.62L290.22,226.51L290.47,226.72L291.24,241.77L291.75,242.45L292.01,234.62L292.27,235.48L293.29,234.56L297.14,234.66L297.4,230.69L298.42,230.79L298.68,233.04L298.94,232.37L299.19,240.92L299.45,241.89L300.22,239.68L301.24,230.43L302.01,228.99L302.27,228.93L302.53,232.06L304.07,226.66L304.32,226.76L304.58,227.96L304.84,222.93L305.6,223.03L306.12,227.36L306.37,250.25L306.63,227.95L307.4,226.32L308.17,235.29L308.43,232.31L309.45,238.07L309.71,236.32L309.96,236.43L311.5,212.54L311.76,216.63L312.02,187.56L312.79,187.56L313.3,187.31L313.56,180.23L314.58,181.84L314.84,184.08L315.35,168.32L315.61,171.68L316.38,169.02L317.4,169.22L318.17,173L318.69,178.33L318.94,172.48L319.2,170.99L320.22,170.99L320.99,171.09L321.76,168.11L322.79,154.63L323.56,154.63L324.07,155.45L324.33,151.69L325.87,151.79L326.12,156.37L326.38,145.55L327.15,145.55L327.41,145.66L327.66,150.08L328.18,150.65L329.2,150.75L329.71,150.17L329.97,150.38L330.74,157.24L331.51,152.32L331.77,154.41L333.05,154.72L333.31,125.11L334.59,106.61L334.84,107.72L335.36,110.43L336.13,112.46L336.38,122.74L336.9,121.8L337.15,115.99L337.92,110.21L338.43,111.4L338.69,111.36L338.95,111.46L339.72,107.26L341.77,107.43L342.03,110.28L342.54,111.04L343.31,125.65L344.08,127.44L344.33,123.43L345.36,125.95L345.62,119.76L346.13,98.72L346.9,125.64L347.93,92.71L348.69,99.55L348.95,97.48L349.21,108.39L351.26,108.49L351.52,108.49L352.54,108.59L352.8,110.65L353.31,99L354.08,99L354.34,99.1L354.59,116.56L354.85,124.66L355.11,109.58L355.88,109.52L356.39,113.16L356.65,111.06L356.9,111.06L358.18,116.71L358.44,114.38L358.7,113.85L359.47,125.31L359.72,123.66L359.98,127.23L360.49,131.02L361.26,129.66L361.52,129.76L361.78,102.89L362.29,102.99L363.06,99.57L363.83,70.88L364.08,83.16L365.11,83.26L365.37,79.1L365.88,79.2L366.65,84.71L366.91,84.82L367.16,78.51L367.67,74.25L368.44,74.25L368.96,73.86L369.21,82.28L369.47,82.42L370.24,85.06L374.34,85.17L374.6,87.82L374.86,86.46L375.88,90.44L376.4,102.95L376.65,102.23L377.42,97.72L378.45,104.8L379.47,104.44L379.73,103.81L379.99,104.02L380.24,106.56L381.52,106.49L381.78,107.3L382.04,99.95L382.81,101.47L383.32,116L383.58,113.62L383.83,108.41L384.6,106.97L384.86,101.56L385.12,102.31L385.37,120.9L386.4,133.6L386.65,133.6L388.96,133.6L389.22,131.74L389.99,133.88L390.25,137.61L390.76,133.7L391.01,134.05L391.78,134.71L393.58,134.58L393.84,134.58L395.38,134.78L395.63,131.32L396.4,131.13L397.17,131.13L397.43,131.24L397.68,133.07L398.2,145.42L398.97,144.59L399.99,138.58L400.76,139.46L401.02,141.38L401.27,135.07L401.53,133.13L402.56,134.83L403.58,139.39L404.35,147.56L405.38,149.1L406.15,144.02L406.4,144.12L406.66,140.95L406.92,141.16L407.17,147.01L408.97,148.51L409.74,148.61L409.99,149.64L410.25,170.41L410.76,163.85L411.53,163.85L411.79,163.95L412.05,162.86L412.3,160.3L412.56,161L413.59,159.42L414.1,157.52L414.36,155.96L415.38,157.19L415.64,155.16L417.95,173.07L418.72,172.48L419.23,169.76L419.48,169.94L419.74,171.51L420.51,170.82L420.77,164.99L421.02,165.19L421.28,168.04L422.31,163.59L422.82,164.54L423.08,162.6L423.33,166.1L424.1,175.46L424.87,169.46L425.13,169.46L425.9,169.56L426.15,174.56L426.92,174.18L427.69,174.28L427.95,181.39L428.46,174.89L428.72,175L430.51,175.66L431.54,181.15L431.8,173.45L432.05,180.97L432.31,181.07L433.34,175.17L433.59,195.38L433.85,193.34L434.1,193.68L434.87,193.68L435.64,193.78L435.9,197.93L437.18,198.14L437.44,195.13L437.7,198.81L438.72,198.86L440.77,226.05L441.03,223.86L441.29,225.19L442.83,245.24L443.08,273.55L443.85,271.13L444.11,272.01L444.36,276.96L444.88,304L445.65,299.83L445.9,295.65L446.42,299.2L446.67,299.61L447.7,300.41L447.96,299.56L449.75,299.77L450.01,298.31L451.03,288.71L451.29,288.09L451.8,298.45L452.06,253.89L453.34,254.2L453.6,232.51L454.88,223.06L455.39,222.11L456.42,222.21L456.68,220.88L457.19,220.99L457.45,215.99L458.47,216.1L458.73,217.26L460.01,217.36L460.27,206.2L460.52,198.54L461.04,204.85L461.81,205.73L462.83,208.49L463.6,213.57L464.63,228.47L465.4,231.72L465.65,231.82L465.91,230.37L466.42,230.47L467.45,226.89L468.22,233.6L469.24,230.71L469.5,229.27\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(99, 110, 250); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"/><g class=\"text\"/></g></g></g><g class=\"overplot\"><g class=\"xy2\" transform=\"translate(80, 50)\" clip-path=\"url('#clip2038c4xy2plot')\"><g class=\"barlayer mlayer\"><g class=\"trace bars\" style=\"opacity: 0.2;\"><g class=\"points\"><g class=\"point\"><path d=\"M0.28,320V320H2.54V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M3.62,320V249.68H5.87V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M7.21,320V235.62H9.46V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M10.54,320V179.71H12.8V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M14.13,320V278.82H16.39V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M17.47,320V222.97H19.72V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M20.8,320V264.42H23.06V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M24.39,320V208.2H26.65V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M27.21,320V278.72H29.47V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M30.55,320V179.6H32.8V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M33.88,320V277.78H36.14V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M37.47,320V208.45H39.73V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M40.81,320V224.22H43.06V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M44.14,320V236.61H46.4V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M47.73,320V279.18H49.99V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M50.55,320V264.78H52.81V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M53.89,320V277.89H56.15V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M57.22,320V236.3H59.48V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M60.56,320V97.13H62.81V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M64.15,320V222.45H66.4V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M67.48,320V250.65H69.74V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M70.3,320V182.77H72.56V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M73.64,320V114.72H75.89V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M76.97,320V250.56H79.23V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M80.31,320V138.24H82.56V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M83.64,320V223.9H85.9V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M87.23,320V236.38H89.49V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M90.05,320V194.61H92.31V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M94.41,320V153.65H96.67V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M97.23,320V291.95H99.49V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M100.83,320V182.33H103.08V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M104.16,320V247.81H106.42V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M107.75,320V250.48H110.01V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M111.08,320V276.85H113.34V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M114.42,320V192.1H116.68V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M117.75,320V210.64H120.01V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M121.34,320V109.94H123.6V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M124.17,320V293.45H126.42V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M127.5,320V152.56H129.76V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M131.09,320V209.56H133.35V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M134.42,320V249.78H136.68V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M137.76,320V140.59H140.02V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M141.35,320V207.55H143.61V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M144.68,320V236.73H146.94V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M147.51,320V16H149.76V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M150.84,320V179.92H153.1V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M154.17,320V221.57H156.43V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M157.77,320V292.11H160.02V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M161.1,320V221.79H163.36V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M164.43,320V168.01H166.69V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M167.26,320V210.04H169.51V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M170.59,320V291.12H172.85V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M173.92,320V236.17H176.18V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M177.26,320V182.79H179.52V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M180.85,320V195.8H183.11V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M184.18,320V206.86H186.44V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M188.03,320V292H190.29V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M191.62,320V250.33H193.88V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M194.96,320V153.94H197.21V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M197.78,320V130.59H200.03V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M201.37,320V264.78H203.63V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M204.7,320V292.72H206.96V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M208.04,320V238.49H210.29V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M211.63,320V293.12H213.88V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M214.96,320V306.29H217.22V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M218.3,320V264.39H220.55V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M221.12,320V320H223.37V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M224.71,320V280.05H226.97V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M228.04,320V280.02H230.3V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M231.38,320V251.12H233.63V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M234.97,320V236.37H237.23V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M238.3,320V235.86H240.56V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M241.64,320V249.17H243.89V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M244.46,320V256.02H246.72V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M247.79,320V280.05H250.05V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M251.38,320V307.11H253.64V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M254.72,320V263.98H256.97V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M258.05,320V237.45H260.31V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M261.39,320V292.24H263.64V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M264.21,320V167.59H266.46V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M267.54,320V99.37H269.8V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M270.88,320V236.96H273.13V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M274.47,320V140.64H276.72V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M277.8,320V84.43H280.06V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M281.65,320V167.23H283.91V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M285.24,320V96.35H287.5V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M288.57,320V320H290.83V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M292.16,320V99.73H294.42V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M295.5,320V320H297.76V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M298.32,320V251.44H300.58V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M301.65,320V222.33H303.91V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M305.25,320V124.09H307.5V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M308.58,320V96.47H310.84V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M311.91,320V196.41H314.17V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M315.25,320V194.69H317.51V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M318.07,320V207.6H320.33V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M321.66,320V237.18H323.92V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M325,320V251.64H327.25V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M328.59,320V251.82H330.84V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M331.92,320V195.08H334.18V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M335.25,320V206.99H337.51V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M338.59,320V169.93H340.85V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M341.41,320V223.91H343.67V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M345,320V138.6H347.26V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M348.34,320V124.25H350.59V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M351.67,320V306.53H353.93V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M355,320V235.5H357.26V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M358.34,320V277.78H360.6V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M361.16,320V221.95H363.42V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M364.75,320V208.7H367.01V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M368.08,320V125.65H370.34V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M371.42,320V305.9H373.68V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M375.27,320V181.87H377.52V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M378.86,320V141.05H381.11V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M382.19,320V55.22H384.45V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M385.53,320V68.65H387.78V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M389.12,320V210.56H391.37V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M392.45,320V238.94H394.71V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M395.27,320V248.47H397.53V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M398.61,320V140.19H400.86V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M402.2,320V222.06H404.45V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M405.53,320V238.78H407.79V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M408.87,320V184.53H411.12V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M412.46,320V249.88H414.71V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M415.79,320V86.7H418.05V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M418.61,320V128.01H420.87V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M422.2,320V223.39H424.46V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M425.54,320V250.15H427.8V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M428.87,320V237.84H431.13V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M432.46,320V169.17H434.72V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M435.8,320V250.19H438.05V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M439.39,320V181.5H441.65V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M442.72,320V94.4H444.98V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M445.54,320V84.83H447.8V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M448.88,320V251.07H451.14V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M452.21,320V124.89H454.47V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M455.8,320V99.46H458.06V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M459.39,320V251.36H461.65V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M462.73,320V166.42H464.99V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g><g class=\"point\"><path d=\"M466.32,320V194.99H468.58V320Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g></g></g></g></g></g><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"><path class=\"xy2-x crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"xy2-y crisp\" d=\"M0,0\" style=\"fill: none;\"/></g><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"383\" transform=\"translate(80.64,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">2013-01-01</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"383\" transform=\"translate(174.26,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">2014-01-01</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"383\" transform=\"translate(267.88,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">2015-01-01</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"383\" transform=\"translate(361.49,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">2016-01-01</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"383\" transform=\"translate(455.37,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">2017-01-01</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"383\" transform=\"translate(548.99,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">2018-01-01</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"79\" y=\"4.199999999999999\" transform=\"translate(0,330.46)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">−25%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"79\" y=\"4.199999999999999\" transform=\"translate(0,279.01)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">−20%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"79\" y=\"4.199999999999999\" transform=\"translate(0,227.55)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">−15%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"79\" y=\"4.199999999999999\" transform=\"translate(0,176.1)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">−10%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"79\" y=\"4.199999999999999\" transform=\"translate(0,124.65)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">−5%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"79\" y=\"4.199999999999999\" transform=\"translate(0,73.2)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">0%</text></g></g><g class=\"overaxes-above\"><g class=\"xy2-x\"/><g class=\"xy2-y\"><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,370)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">0%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,332.28)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">10%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,294.56)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">20%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,256.84000000000003)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">30%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,219.12)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">40%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,181.4)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">50%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,143.68)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">60%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,105.96000000000001)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">70%</text></g><g class=\"y2tick\"><text text-anchor=\"start\" x=\"551\" y=\"4.199999999999999\" transform=\"translate(0,68.24)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">80%</text></g></g></g></g><g class=\"subplot xy2\"/></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-2038c4\"><g class=\"clips\"/><clipPath id=\"legend2038c4\"><rect width=\"98\" height=\"48\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M81.41,73.2L549.5,73.2\" clip-path=\"url('#clip2038c4xy')\" style=\"opacity: 1; stroke: rgb(42, 63, 95); stroke-opacity: 1; fill: rgb(0, 0, 0); fill-opacity: 0; stroke-width: 1px;\"/></g></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(590, 50)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"98\" height=\"48\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"translate(0, 0)\" clip-path=\"url('#legend2038c4')\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0, 14.5)\" style=\"opacity: 1;\"><text class=\"legendtext user-select-none\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">portfolio</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(99, 110, 250); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"/></g></g><rect class=\"legendtoggle\" pointer-events=\"all\" x=\"0\" y=\"-9.5\" width=\"92.375\" height=\"19\" style=\"cursor: pointer; fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(0, 33.5)\" style=\"opacity: 1;\"><text class=\"legendtext user-select-none\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">turnover</text><g class=\"layers\" style=\"opacity: 0.2;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0.5px; fill: rgb(239, 85, 59); fill-opacity: 1; stroke: rgb(229, 236, 246); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" pointer-events=\"all\" x=\"0\" y=\"-9.5\" width=\"92.375\" height=\"19\" style=\"cursor: pointer; fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"><text class=\"ytitle\" transform=\"rotate(-90,16.200000000000003,210)\" x=\"16.200000000000003\" y=\"210\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">cumulative return</text></g><g class=\"g-y2title\"><text class=\"y2title\" transform=\"rotate(-90,603.971875,210)\" x=\"603.971875\" y=\"210\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">turnover</text></g><g class=\"annotation\" data-index=\"0\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,199.5,88.9)\"><g class=\"cursor-pointer\" transform=\"translate(85, 56)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"228\" height=\"64\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 1; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"start\" x=\"2.65625\" y=\"14\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\"><tspan class=\"line\" dy=\"0em\" x=\"2.65625\" y=\"14\"><tspan style=\"font-weight:bold\">Overall</tspan> (portfolio/benchmark)</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"2.65625\" y=\"14\">SharpeRatio:      -0.790/0.000</tspan><tspan class=\"line\" dy=\"2.6em\" x=\"2.65625\" y=\"14\">MaxDrawDown:  27.79%, 1254 Days</tspan><tspan class=\"line\" dy=\"3.9000000000000004em\" x=\"2.65625\" y=\"14\">AnnualVolatility: 10.10%/0.00%</tspan></text></g></g></g></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 4.7 s\n"
     ]
    }
   ],
   "source": [
    "class MyAlg(trading.CustomAlgorithm):\n",
    "    first_break = True\n",
    "    def initialize(self):\n",
    "        # setup engine\n",
    "        engine = self.get_factor_engine()\n",
    "        engine.to_cuda()\n",
    "        universe = factors.AverageDollarVolume(win=120).top(500)\n",
    "        engine.set_filter(universe)\n",
    "\n",
    "        # add your factors\n",
    "        rsi = factors.RSI()\n",
    "        engine.add( rsi.top(3).shift(1), 'longs' )\n",
    "        engine.add( rsi.bottom(3).shift(1), 'shorts' )\n",
    "        \n",
    "        # schedule rebalance before market close\n",
    "        self.schedule_rebalance(trading.event.MarketClose(self.rebalance, offset_ns=-10000))\n",
    "\n",
    "        # simulation parameters\n",
    "        self.blotter.capital_base = 10000\n",
    "        self.blotter.max_shares = 1e+19\n",
    "        self.blotter.set_commission(percentage=0, per_share=0.005, minimum=1)\n",
    "        # self.blotter.set_slippage(percentage=0, per_share=0.4)\n",
    "\n",
    "    def rebalance(self, data: 'pd.DataFrame', history: 'pd.DataFrame'):\n",
    "        if self.first_break:\n",
    "            self.first_break = False  # Keep consistent with zipline\n",
    "            return\n",
    "\n",
    "        all_assets = data.index\n",
    "        longs = set(all_assets[data.longs])\n",
    "        shorts = set(all_assets[data.shorts])\n",
    "\n",
    "        self.record(universe_size=len(all_assets))\n",
    "\n",
    "        # Build a 2x-leveraged, equal-weight, long-short portfolio.\n",
    "        one_third = 1.0 / 3.0\n",
    "        self.blotter.batch_order_target_percent(longs, [one_third]*len(longs))\n",
    "        self.blotter.batch_order_target_percent(shorts, [-one_third]*len(shorts))\n",
    "        \n",
    "        # Remove any assets that should no longer be in our portfolio.\n",
    "        portfolio_assets = longs | shorts\n",
    "        positions = self.blotter.portfolio.positions.keys()\n",
    "        removes = positions - set(portfolio_assets)\n",
    "        self.blotter.batch_order_target_percent(removes, [0] * len(removes))\n",
    "\n",
    "    def terminate(self, records: 'pd.DataFrame'):\n",
    "        self.plot()\n",
    "\n",
    "%time results = trading.run_backtest(loader, MyAlg, '2013-1-3', '2018-1-3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2.1984200477600098, 'GB')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "torch.cuda.max_memory_allocated()/1024**3, 'GB'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:spectre] *",
   "language": "python",
   "name": "conda-env-spectre-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
